using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Fecha: 5/30/2013 4:50:40 PM
    /// </summary>
    [Serializable]
    public class ObligacionLista : ReadOnlyListBase<ObligacionLista, ObligacionInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(FaseLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static ObligacionLista GetObligacionLista(string idExpedienteLicenciamineto)
        {

            return DataPortal.Fetch<ObligacionLista>(idExpedienteLicenciamineto);
        }


        private ObligacionLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        private void DataPortal_Fetch(string criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_exp_lic_id", criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_OBLIGACIONES\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ObligacionInfo.GetFaseInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
      

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Diana Ortega
    /// Fecha: 5/30/2013 4:50:40 PM
    /// </summary>
    [Serializable]
    public class ObligacionInfo : ReadOnlyBase<ObligacionInfo>
    {
        #region Business Methods
        public Guid      Id { get; internal set; }
        public Guid      IdExp { get; internal set; }
        public string    Nombre { get; internal set; }
        public DateTime  Fecha { get; internal set; }    
      
        public string    NombreExp { get; internal set; }
        public string    Tipo{ get; internal set; }
        public DateTime  FechaInicio { get; internal set; }
        public int       Alerta{ get; internal set; }
        public string    Presentacion{ get; internal set; }
        public string    Ciclo { get; internal set; }
        public int       Repeticion { get; internal set; }
        public string    Configuracion { get; internal set; }
        public string    Cumplimiento { get; internal set; }
        #endregion

        #region Factory Methods

        internal static ObligacionInfo GetFaseInfo(DataRow childData)
        {
            return DataPortal.FetchChild<ObligacionInfo>(childData);
        }

        private ObligacionInfo()
        { /* require use of factory methods */ }
        
      
        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            Int32 valInt = 0;    
            Id = Guid.Parse(childData["oli_id"].ToString());
          
            Nombre = childData["oli_oblicacion"].ToString();
            Fecha = DateTime.Parse(childData["oli_fecha_registro"].ToString());
            IdExp = Guid.Parse(childData["exp_id"].ToString());
            NombreExp = childData["exp_nombre"].ToString();
            //
            Tipo = childData["oli_tipo"].ToString();
            if(childData["oli_fecha_inicio"].ToString()!="")
                FechaInicio = DateTime.Parse(childData["oli_fecha_inicio"].ToString());
            int.TryParse(childData["oli_alerta"].ToString(),out valInt);
            Alerta = valInt;
            Presentacion = childData["oli_presentacion"].ToString();
            Ciclo = childData["oli_ciclo"].ToString();
            int.TryParse(childData["oli_repeticion"].ToString(), out valInt);
            Repeticion = valInt;
            Configuracion = childData["oli_configurada"].ToString();
            Cumplimiento = childData["oli_cumple"].ToString();
        }

        #endregion
    }
}
